# -*- coding: latin-1 -*-

from django.db import models
from tjango.autocomplete.autocompletefields import *
from tjango.calculated.calculatedfields import CalculatedField


class Provincia(models.Model):
	nombre = models.CharField(max_length=50, unique=True)
	def __unicode__(self):
		return self.nombre
	class Meta:
		ordering = ['nombre']

class Localidad(models.Model):
	nombre = models.CharField(max_length=50, unique=True)
	provincia = AutocompleteField(Provincia, ['nombre'])
	def __unicode__(self):
		return self.nombre
	class Meta:
		verbose_name_plural = "Localidades"
		ordering = ['nombre']


class Actividad(models.Model):
	nombre = models.CharField(max_length=50, unique=True)
    	def __unicode__(self):
      		return self.nombre
        class Meta:
    		verbose_name_plural = "Actividades"
		ordering = ['nombre']


class Contacto(models.Model):
	nombre = models.CharField(max_length=100, unique=True)
	calle = models.CharField(max_length=40, blank=True, null=True)
	numero = models.IntegerField("número",max_length=6, blank=True, null=True)
	barrio = models.CharField(max_length=20, blank=True, null=True)
	otros_datos = models.CharField(max_length=20, blank=True, null=True)
	localidad = AutocompleteField(Localidad, ['nombre'], blank=True, null=True)
	provincia = CalculatedField(models.CharField, source = ['localidad'], server='Localidad.objects.get(id=localidad).provincia.nombre', blank=True, null=True) 
	cuit= models.CharField(max_length=13, blank=True, null=True)#widget zz-xxxxxxxx-x
	ingresos_brutos = models.CharField(max_length = 13,blank=True, null=True)
	actividad = AutocompleteField(Actividad,['nombre'],blank=True,null=True)
	email = models.EmailField(blank=True,null=True)
	email_alternativo = models.EmailField(blank=True,null=True)
	personas_relacionadas = models.CharField(max_length=100,blank=True,null=True)
	observacion = models.TextField("observación",blank=True,null=True)
	
	def __unicode__(self):
		return self.nombre
	def get_address_print(self):
		dom = self.calle or ""
		if self.numero: dom += " %s" % self.numero
		if self.barrio: dom += " %s" % self.barrio
		if self.otros_datos: dom += " %s" % self.otros_datos
		if self.localidad: dom += " %s" % self.localidad.nombre
		if self.localidad.nombre != self.provincia: 
			if self.provincia: dom += " %s" % self.provincia
		return dom
		
	def get_address(self):
		dom = self.calle or ""
		if self.numero: dom += " %s" % self.numero
		if self.barrio: dom += " %s" % self.barrio
		if self.otros_datos: dom += " %s" % self.otros_datos
		return dom	
		
	def saldo(self):
		debe = 0
		pago = 0
		ventas = self.ventas.all()
		recibos = self.recibos.all()
		for venta in ventas:
			if not venta.anular:
				debe += float(venta.saldo)
		for recibo in recibos:
			pago += float(recibo.pagado) 
			if recibo.descuento:
				pago += float(recibo.descuento) 
			if recibo.recargo:
				pago -= float(recibo.recargo)
		return debe - pago 

        def saldo_sin_excedente(self):
              saldo = 0
              pagado = 0
              ventas = 	self.ventas.all()
              for venta in ventas:
                de = float(venta.saldo)
                pa = 0
                if not venta.anular:
                  recibos = venta.pagos.all()
                  for recibo in recibos:
                    pa += recibo.importe
                pagado = de - pa
                saldo += pagado
              return saldo
         
        def excedente(self):
           exced = self.saldo() -  self.saldo_sin_excedente()
           exced = -float(exced)
           if exced == 0.0:
             return 0.0
           return float(exced)
		
	class Meta:
		ordering = ['nombre']
		



class Telefono(models.Model):
	tipo = models.CharField(max_length=20)
	numero = models.CharField(max_length=20)
	contacto = models.ForeignKey(Contacto)

